import 'dart:isolate';

main() {

  create_isolate();
}

//创建isolate
create_isolate() async {
  //接受对象的 ReceivePort  新的ioslate的接受消息对象
  var receive = ReceivePort();
  //新建一个isolate
  Isolate.spawn(getData, receive.sendPort);
  //await 等待 新isolate  返回的sendPort 在receive.first后 receive在此时 已经无法被复用
  SendPort sendPort= await receive.first as SendPort;

  //为了能让 新isolate 接受main的消息  通过 上面的send 发送一个新建的sendPort给对方
  var askReceive=ReceivePort();
  //主动发送第一次消息
  sendPort.send(askReceive.sendPort);
  sendPort.send([1,"你好"]);
  //这样 这里就能监听数据 接收了
  askReceive.listen((message) {
     print(message);
     sendPort.send([2,"你好好"]);
  });
}

//另一个isolate
getData(SendPort sendPort){
    var recevice=ReceivePort();
    //返回给MIAN 一个sendport  来接收 MIAN 消息
    sendPort.send(recevice.sendPort);
    recevice.listen((message) {
        if(message[0]==1){
          print(message[1]);
           // sendPort=message[1] as SendPort;
          recevice.sendPort.send("你们好！");
        }else if (message[0]==2){
           print(message[1]);
           recevice.sendPort.send("滚");
        }
    });
}
